# CI/容器化用 Dockerfile
# 使用国内镜像源拉取基础镜像（如不需要可替换为官方镜像）
# 备选镜像源前缀：docker.1ms.run / dockerpull.com / docker.xuanyuan.me
FROM docker.m.daocloud.io/python:{{ max_python_version }}-slim
{% if use_domestic_mirrors %}
# ---- 国内镜像源 ----
ENV PIP_INDEX_URL=https://mirrors.cloud.tencent.com/pypi/simple
ENV PIP_TRUSTED_HOST=mirrors.cloud.tencent.com
ENV UV_INDEX_URL=https://mirrors.cloud.tencent.com/pypi/simple
ENV UV_TRUSTED_HOST=mirrors.cloud.tencent.com
{% endif %}
# 环境变量：非交互 + 路径配置
ENV DEBIAN_FRONTEND=noninteractive \
    LANG=C.UTF-8 \
    LC_ALL=C.UTF-8 \
    UV_LINK_MODE=copy \
    UV_CACHE_DIR=/uv-cache \
    UV_PROJECT_ENVIRONMENT=/opt/venv \
    PATH="/opt/venv/bin:${PATH}"

{% if use_domestic_mirrors -%}
# 配置 apt 国内镜像（华为云）并安装系统依赖
RUN sed -i 's|deb.debian.org|mirrors.cloud.tencent.com|g' /etc/apt/sources.list.d/debian.sources \
    && apt-get update \
    && apt-get install -y --no-install-recommends \
        ca-certificates \
        curl \
        git \
        build-essential \
    && rm -rf /var/lib/apt/lists/*
{% else -%}
# 安装系统依赖
RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        ca-certificates \
        curl \
        git \
        build-essential \
    && rm -rf /var/lib/apt/lists/*
{% endif %}
{% if use_domestic_mirrors %}
# 安装 uv（国内镜像）
RUN pip install --no-cache-dir uv -i https://mirrors.cloud.tencent.com/pypi/simple/
{% else %}
# 安装 uv
RUN pip install --no-cache-dir uv
{% endif %}
# 预装项目所需 Python 版本（min==max 时只装一次）
RUN uv python install {{ min_python_version }}{% if min_python_version != max_python_version %} {{ max_python_version }}{% endif %}

# 预装项目 dev 依赖（仅复制依赖描述文件，利用 Docker 层缓存）
WORKDIR /workspace
COPY pyproject.toml{% if use_tox %} tox.ini{% endif %} README.md ./
COPY src/ ./src/

# 同步依赖到 /opt/venv（CI 时直接复用）
# 有 uv.lock 时用 --frozen 锁定版本保证可复现；没有则退化为常规解析（不要静默吞错）
RUN if [ -f uv.lock ]; then \
        uv sync --frozen --no-install-project; \
    else \
        uv sync --no-install-project; \
    fi

# 持久化 uv 缓存目录（CI 可挂载到宿主机加速）
VOLUME ["/uv-cache"]

# 以非 root 用户运行（最小权限）
RUN useradd --create-home --uid 1000 appuser \
    && chown -R appuser /workspace /uv-cache /opt/venv
USER appuser

# 默认入口
CMD ["/bin/bash"]
